/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.controller;

import br.com.folha.dao.DisciplinaDao;
import br.com.folha.dao.GenericoDao;
import br.com.folha.dao.ProfessorDao;
import br.com.folha.dao.TurmaDao;
import br.com.folha.dao.UnidadeDao;
import br.com.folha.dao.DiaSemanaDao;
import br.com.folha.dao.DisponibilidadeDao;
import br.com.folha.dao.SalaDao;
import br.com.folha.entity.DiaSemana;
import br.com.folha.entity.Disciplina;
import br.com.folha.entity.DisponibilidadeProfessor;
import br.com.folha.entity.Professor;
import br.com.folha.entity.Sala;
import br.com.folha.entity.Turma;
import br.com.folha.entity.TurmaAula;
import br.com.folha.entity.Unidade;
import br.com.folha.service.TurmaService;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

/**
 *
 * @author marceloml
 */
@ManagedBean(name = "TurmaController")
@ViewScoped
public class TurmaController implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    private Turma turma;
    private Turma turmaSelecionada;
    private GenericoDao turmaDao = new GenericoDao();
    private transient DataModel lista;
    private TurmaDao consulta = new TurmaDao();
    private String acao;
    private String acaoAula;
    private Date data = new Date();
        
    private Unidade unidade;    
    private UnidadeDao unidadeDao = new UnidadeDao();
    private Integer selectedUnidade;    
    private Long resultado;
    private boolean retorno;

    private TurmaAula turmaAula;   
    
    private Integer selectedDisciplina;
    private Disciplina disciplina;
    private DisciplinaDao disciplinaDao = new DisciplinaDao();   
    
    private Integer selectedProfessor;
    private ProfessorDao professorDao = new ProfessorDao();
    private List<Object> professoresAtivos;
    private Professor professor;
    
    private List<Disciplina> listaProfessores;
    private transient DataModel listaAula;
    private TurmaAula aulaSelecionada; 
    
    private String horaIni;
    private String horaFim;
    private Integer selectedDiaSemana;   
    private DiaSemana diaSemana;
    private DiaSemanaDao diaSemanaDao = new DiaSemanaDao();
    
    private transient DataModel listaDisponibilidade;
    private DisponibilidadeDao disponibilidadeDao = new DisponibilidadeDao();
    private DisponibilidadeProfessor disponibilidadeProfessor;
    
    private transient DataModel listaSala;
    private SalaDao salaDao = new SalaDao();
    private Sala sala;
    private Integer selectedSala;
    private Class Professor;
    
    private TurmaService turmaService = new TurmaService();
    
    private Integer selectedFormaCalc;
    private Boolean exibeValor;
    private Integer tipoContrato;
    
    private String selectedMaterial;
    
    public TurmaController(){
        
        turma = new Turma();
        turmaAula = new TurmaAula();
        selectedFormaCalc = 0;        
        disponibilidadeProfessor = new DisponibilidadeProfessor();
        acao = "";
        acaoAula = "";
    }
    
    public Boolean getExibeValor() {
        if(selectedFormaCalc == 1){
            exibeValor = false;

        }else{
            exibeValor = true;
        }
        System.out.println("Exibe Valor :"+exibeValor);
        return exibeValor;
    }    
    
  public Collection<SelectItem> getCarregarSelect() {        
      
        unidade = new Unidade();
      
        Collection<SelectItem> lst = new ArrayList<SelectItem>();        
        lst.add(new SelectItem(null, "Selecione a unidade"));      //Primeiro item do select  
        
        List<Integer> integerArray = new ArrayList<Integer>();
        
        LoginController login = new LoginController();
        
        for (Iterator iterator = login.Usuario.getUnidades().iterator(); iterator.hasNext();){
            
            Unidade unidade = (Unidade) iterator.next();                     
            
            integerArray.add(unidade.getId());
        
        }        
        
        List<Unidade> lista = unidadeDao.listaUnidade(unidade,integerArray);
        
        for (int i = 0; i < lista.size(); i++) {          
            lst.add(new SelectItem(lista.get(i).getId(), lista.get(i).getNome()));              
        }          
        
        return lst;          
    }    
    
    
    /*
     * Bloco para inclusão de um novo registro
     */
    public void preparaInclusao(){
        System.out.println("Estou aqui");
        FacesMessage msg = null;   
        
        if(turma.getCodigo().equals("")){
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar o código da Turma!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                              
        }else if(turma.getNome().equals("")){
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar o nome da Turma!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                                        
        }else if(this.selectedUnidade.equals("") || this.selectedUnidade == 0 || this.selectedUnidade == null){                        
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar a unidade da Turma!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                                        
        }else if((this.selectedFormaCalc != 1 && this.selectedFormaCalc != null) && Integer.valueOf(turma.getValor().toString()) == 0){
            
             System.out.println("Estou aqui tbm");
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar o valor", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                
                
        }else{
        
            if(!acao.equals("edicao")){

                    salvaOperacao();

            }else{
                editaTurma();

            }
        
        }
        
    }
    
    public void salvaOperacao(){
     
        FacesMessage msg = null;                 
                        
        //Seta a data de Cadastro
        turma.setDt_cadastro(data);
        
        LoginController usuarioLogado = new LoginController();
        
        //Seta usuário que cadastrou a Turma
        turma.setUsuario_cadastro(usuarioLogado.Usuario.getId());                   
        
        turma.setUnidade(unidadeDao.getById(selectedUnidade));                
        
        turma.setFormaCalc(selectedFormaCalc);
        
        retorno = turmaDao.salvar(turma);                                                       
        
        lista = new ListDataModel(consulta.listaTurma(Turma.class));
        
        resetTurma();
        
        if(retorno){                   
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Turma cadastrada com sucesso!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }else{
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Falha ao cadastrar Turma!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);            
        }
        
    }    
    
    /*
     * Fim do bloco para inclusão de um novo registro
     */
    
    /*
     * Inicio do bloco de alteração de um registro
     */
    
    public void preparaEdicao(){
        
        if(turmaSelecionada.getUnidade() == null){
            getCarregarSelect();
        }else{
            this.selectedUnidade = turmaSelecionada.getUnidade().getId();
        }
        
        turma = this.turmaSelecionada;
        selectedFormaCalc = this.turma.getFormaCalc();
        acao = "edicao";
        
        /*
         * É chamada a função para que irá ou não esconder o campo valor, dependendo
         * da forma de pagamento da Turma
         */
        org.primefaces.context.RequestContext.getCurrentInstance().execute("escondeValorTurma()");
        
    }
    
    public void editaTurma(){
        
        FacesMessage msg = null;                 
                        
        //Seta data de atualização
        turma.setDt_atualizacao(data);
        
        LoginController usuarioLogado = new LoginController();
        
        //Seta usuário que está alterando a turma
        turma.setUsuario_atualizacao(usuarioLogado.Usuario.getId());
        
        turma.setUnidade(unidadeDao.getById(this.selectedUnidade));
        
        turma.setFormaCalc(selectedFormaCalc);
        
        retorno = turmaDao.atualizar(turma);
        
        resetTurma();
        
        lista = new ListDataModel(consulta.listaTurma(Turma.class));
        
        if(retorno){           
           
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Turma Atualizada com sucesso!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            
        }         
        
    }

    /*
     * Fim do bloco de alteração de um registro
     */    
    
    /*
     * Bloco de deleção de um registro
     */
    
        public void deleteTurma(){
            
            FacesMessage msg = null;  
            
            if(this.turmaSelecionada == null){
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selecione uma Turma para ser deletada!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                
            }else{
                retorno = turmaDao.excluir(this.turmaSelecionada);
                
                if(retorno){
                    
                    msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Turma excluída corretamente!", "");
                    FacesContext.getCurrentInstance().addMessage(null, msg);                    
                    
                    resetTurma();
                    lista = new ListDataModel(consulta.listaTurma(Turma.class));
                    
                }else{
                    
                    msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Falha ao deletar turma!", "");
                    FacesContext.getCurrentInstance().addMessage(null, msg);                    
                    
                }
            }
            
        }
    
    /*
     * Fim do bloco de deleção de um registro
     */
    
    public void resetTurma(){
        
        turma = new Turma();        
        getCarregarSelect();
        this.selectedUnidade = null;
        this.selectedFormaCalc = 1;
        acao = "";
        
    }

    public Turma getTurma() {
        return turma;
    }

    public void setTurma(Turma turma) {
        this.turma = turma;
    }

    public Turma getTurmaSelecionada() {
        return turmaSelecionada;
    }

    public void setTurmaSelecionada(Turma turmaSelecionada) {
        this.turmaSelecionada = turmaSelecionada;
    }

    public Integer getSelectedUnidade() {
        return selectedUnidade;
    }

    public void setSelectedUnidade(Integer selectedUnidade) {
        this.selectedUnidade = selectedUnidade;
    }

    public DataModel getLista() {
     
        if(lista == null || lista.getRowCount() == 0){
                        
                    lista = new ListDataModel(consulta.listaTurma(Turma.class));
        
        }
        
        return lista;        
        
    }

    public void setLista(DataModel lista) {
        this.lista = lista;
    }    

    public TurmaAula getTurmaAula() {
        return turmaAula;
    }

    public void setTurmaAula(TurmaAula turmaAula) {
        this.turmaAula = turmaAula;
    }

    public Integer getSelectedDisciplina() {
        return selectedDisciplina;
    }

    public void setSelectedDisciplina(Integer selectedDisciplina) {
        this.selectedDisciplina = selectedDisciplina;
    }
    
  public Collection<SelectItem> getCarregarSelectDisciplina() {        
      
        disciplina = new Disciplina();
      
        Collection<SelectItem> lst = new ArrayList<SelectItem>();        
        lst.add(new SelectItem(null, "Selecione a Disciplina"));      //Primeiro item do select 
        
        if(selectedProfessor == null || selectedProfessor == 0){
            
            List<Disciplina> lista = disciplinaDao.listaDisciplina(disciplina);

            for (int i = 0; i < lista.size(); i++) {          
                lst.add(new SelectItem(lista.get(i).getId(), lista.get(i).getNome()));              
            }
            
        }else{
            
            List<Disciplina> lista = disciplinaDao.listaDisciplinaProfessor("d",selectedProfessor);

            for (int i = 0; i < lista.size(); i++) {          
                lst.add(new SelectItem(lista.get(i).getId(), lista.get(i).getNome()));              
            }            
            
        }
                
        return lst;          
    }    

    public Integer getSelectedProfessor() {
        return selectedProfessor;
    }

    public void setSelectedProfessor(Integer selectedProfessor) {
        this.selectedProfessor = selectedProfessor;
    }
    
  public Collection<SelectItem> getCarregarSelectProfessor() {                                      
        
        Collection<SelectItem> lst = new ArrayList<SelectItem>();        
        lst.add(new SelectItem(null, "Selecione o Professor"));      //Primeiro item do select           
        
       if(selectedDisciplina != null && selectedDisciplina != 0){
                 
            listaProfessores = disciplinaDao.listaDisciplinaProfessor("p",selectedDisciplina);        
                
            if(!listaProfessores.isEmpty()){
            
                for(Iterator iterator = listaProfessores.get(0).getProfessores().iterator(); iterator.hasNext();){
                    
                    Professor professor = (Professor) iterator.next();                                        
                        
                        lst.add(new SelectItem(professor.getId(), professor.getNome()));              
                    
                }            
                
            }
            
        }else{
           
            professoresAtivos = professorDao.listaProfessorAtivo(Professor.class);        

             for (Iterator iterator = professoresAtivos.iterator(); iterator.hasNext();){

                 Professor professor = (Professor) iterator.next();                     

                 lst.add(new SelectItem(professor.getId(), professor.getNome()));           

             }           
           
       }
        
        return lst;          
    }
  
    public Collection<SelectItem> getCarregarDiaSemana() {                                      

          diaSemana = new DiaSemana();

          Collection<SelectItem> lst = new ArrayList<SelectItem>();        
          lst.add(new SelectItem(0, "Selecione o Dia da Semana"));      //Primeiro item do select   
          List<DiaSemana> lista = diaSemanaDao.listaDiaSemana(diaSemana);
          for (int i = 0; i < lista.size(); i++) {                    
              lst.add(new SelectItem(lista.get(i).getId(), lista.get(i).getNome()));              
          }          
          return lst;    

      }
    
  public Collection<SelectItem> getCarregarSelectSala() {        
      
        sala = new Sala();
      
        Collection<SelectItem> lst = new ArrayList<SelectItem>();        
        lst.add(new SelectItem(null, "Selecione a Sala de Aula"));      //Primeiro item do select 
        
        if(selectedUnidade != null && selectedUnidade != 0){
            
            List<Sala> listaSalas = salaDao.listaSalaUnidade(sala, selectedUnidade);

            for (int i = 0; i < listaSalas.size(); i++) {          
                lst.add(new SelectItem(listaSalas.get(i).getId(), listaSalas.get(i).getPredio().getNome()+" - "+listaSalas.get(i).getNome()));              
            }
            
        }
                
        return lst;          
    }    
      
    public void resetTurmaAula(){
        turmaSelecionada   = null;
        selectedDisciplina = 0;
        selectedProfessor  = 0;
        selectedDiaSemana  = 0;
        selectedSala       = 0;
        selectedMaterial   = "";
        this.horaFim       = "";
        this.horaIni       = "";
        acaoAula           = "";
    }

    public DataModel getListaAula() {
        
        if(listaAula == null || listaAula.getRowCount() == 0){
        
            listaAula = new ListDataModel(consulta.listaAula(TurmaAula.class, this.turma.getId()));
            
        }

        return listaAula;
    }
    
    public void preparaInclusaoAula(){
        
        FacesMessage msg = null;             
        
        if(selectedDisciplina == 0){
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar a Disciplina!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                              
        }else if(selectedProfessor == 0){
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar o Professor!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);  
        }else if(selectedDiaSemana == 0){
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar o Dia da Semana!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                                  
        }else if(selectedSala == 0){
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar a Sala de Aula!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                 
        }else if(this.horaIni == null || this.horaIni.trim().equals("")){
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar a hora inicial!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                     
        }else if(this.horaFim == null || this.horaFim.trim().equals("")){                        
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "É necessário informar a hora final!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg); 
                
        /*
         * Tratamento para que o usuário não inclua uma hora final menor ou igual a hora inicial
         */        
        }else if(Integer.parseInt(this.horaFim.substring(0, 2)+this.horaFim.substring(3, 5)) <= Integer.parseInt(this.horaIni.substring(0, 2)+this.horaIni.substring(3, 5))){
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Hora Final menor ou igual a Hora Inicial", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);  
                
        }else{
            
                Date dataAtual = new Date();
                Calendar calendar = Calendar.getInstance();  
                calendar.setTime(dataAtual);    
                calendar.set(Calendar.HOUR_OF_DAY,Integer.parseInt(horaIni.substring(0, 2)));        
                calendar.set(Calendar.MINUTE,Integer.parseInt(horaIni.substring(3, 5)));
                calendar.set(Calendar.SECOND,0);

                Date dataAtual2 = new Date();
                Calendar calendar2 = Calendar.getInstance();  
                calendar2.setTime(dataAtual2);    
                calendar2.set(Calendar.HOUR_OF_DAY,Integer.parseInt(horaFim.substring(0,2)));
                calendar2.set(Calendar.MINUTE,Integer.parseInt(horaFim.substring(3, 5)));
                calendar2.set(Calendar.SECOND,0);

                /*
                 * Validação se o professor já está dando aula no mesmo dia e horário
                 */
                List<TurmaAula> listaTurmaAula;
                listaTurmaAula = consulta.consultaAula(professorDao.getById(selectedProfessor),diaSemanaDao.getById(this.selectedDiaSemana),calendar.getTime(),calendar2.getTime());                                                               

                    if(!acaoAula.equals("edicao")){
                        
                        if(!listaTurmaAula.isEmpty()){
                        
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Professor já possui aula no mesmo dia ou horário", "");
                            FacesContext.getCurrentInstance().addMessage(null, msg);                                          
                            
                        }else{

                            salvaAula();
                            
                        }

                    }else{
                        
                        if(turmaService.buscaProfessorAula(listaTurmaAula, selectedProfessor)){

                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Professor já possui aula no mesmo dia ou horário", "");
                            FacesContext.getCurrentInstance().addMessage(null, msg);                                                                      
                            
                        }else{
                        
                            editaAula();
                            acao = "";
                        
                        }
                    }        
        
      }    
    }
    
    public void salvaAula(){
        
        this.turmaAula.setTurma(consulta.getById(this.turma.getId()));
        this.turmaAula.setDisciplina(disciplinaDao.getById(selectedDisciplina));
        this.turmaAula.setProfessor(professorDao.getById(selectedProfessor));
        this.turmaAula.setSala(salaDao.getById(this.selectedSala));
        this.turmaAula.setMaterial(selectedMaterial);
        
        Date dataAtual = new Date();
        Calendar calendar = Calendar.getInstance();  
        
        calendar.setTime(dataAtual);    
        
        calendar.set(Calendar.HOUR_OF_DAY,Integer.parseInt(horaIni.substring(0, 2)));        
        calendar.set(Calendar.MINUTE,Integer.parseInt(horaIni.substring(3, 5)));
        calendar.set(Calendar.SECOND,0);
                
        this.turmaAula.setHoraIni(calendar.getTime());

        Date dataAtual2 = new Date();
        Calendar calendar2 = Calendar.getInstance();  
        
        calendar2.setTime(dataAtual2);    
        calendar2.set(Calendar.HOUR_OF_DAY,Integer.parseInt(horaFim.substring(0,2)));
        calendar2.set(Calendar.MINUTE,Integer.parseInt(horaFim.substring(3, 5)));
        calendar2.set(Calendar.SECOND,0);
        
        this.turmaAula.setHoraFim(calendar2.getTime());
        
        this.turmaAula.setDiaSemana(diaSemanaDao.getById(this.selectedDiaSemana));
        
        tipoContrato = turmaService.buscaTipoContrato(professorDao.getById(selectedProfessor), diaSemanaDao.getById(this.selectedDiaSemana), calendar.getTime(), calendar2.getTime());        
        
        this.turmaAula.setTipoContrato(tipoContrato);
        
        //Seta a data de Cadastro
        this.turmaAula.setDt_cadastro(data);
        
        LoginController usuarioLogado = new LoginController();
        
        //Seta usuário que cadastrou a aula
        this.turmaAula.setUsuario_cadastro(usuarioLogado.Usuario.getId());         
        
        retorno = turmaDao.salvar(this.turmaAula);
        
        resetTurmaAula();
        
        FacesMessage msg = null;
        
        listaAula = new ListDataModel(consulta.listaAula(TurmaAula.class, this.turma.getId()));
        
        if(retorno){                   
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Aula cadastrada com sucesso!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }else{
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Falha ao cadastrar Aula!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);            
        }        
        
    }
    
    public void preparaEdicaoAula(){
        
        this.selectedDisciplina = aulaSelecionada.getDisciplina().getId();
        this.selectedProfessor  = aulaSelecionada.getProfessor().getId();  
        this.selectedDiaSemana  = aulaSelecionada.getDiaSemana().getId();
        this.selectedSala       = aulaSelecionada.getSala().getId();
        this.selectedMaterial   = aulaSelecionada.getMaterial();
        
        this.turmaAula = this.aulaSelecionada;
        
        //Tratamento para preencher com zeros a esquerda
        this.horaIni = this.horaIni.format("%02d", this.aulaSelecionada.getHoraIni().getHours())+ ":" +this.horaIni.format("%02d", this.aulaSelecionada.getHoraIni().getMinutes()) ;        
        this.horaFim = this.horaFim.format("%02d", this.aulaSelecionada.getHoraFim().getHours())+ ":" +this.horaFim.format("%02d", this.aulaSelecionada.getHoraFim().getMinutes()) ;        
        
        acaoAula = "edicao";
        
    } 
    
    public void editaAula(){
        
        FacesMessage msg = null;  
        
        this.turmaAula.setDisciplina(disciplinaDao.getById(selectedDisciplina));
        this.turmaAula.setProfessor(professorDao.getById(selectedProfessor));
        
        Date dataAtual = new Date();
        Calendar calendar = Calendar.getInstance();  
        
        calendar.setTime(dataAtual);    
        
        calendar.set(Calendar.HOUR_OF_DAY,Integer.parseInt(horaIni.substring(0, 2)));      
        
        calendar.set(Calendar.MINUTE,Integer.parseInt(horaIni.substring(3, 5)));
        calendar.set(Calendar.SECOND,0);
                
        this.turmaAula.setHoraIni(calendar.getTime());

        Date dataAtual2 = new Date();
        Calendar calendar2 = Calendar.getInstance();  
        
        calendar2.setTime(dataAtual2);    
        calendar2.set(Calendar.HOUR_OF_DAY,Integer.parseInt(horaFim.substring(0,2)));
        calendar2.set(Calendar.MINUTE,Integer.parseInt(horaFim.substring(3, 5)));
        calendar2.set(Calendar.SECOND,0);
        
        this.turmaAula.setHoraFim(calendar2.getTime());  
        
        this.turmaAula.setDiaSemana(diaSemanaDao.getById(this.selectedDiaSemana));
        
        this.turmaAula.setSala(salaDao.getById(this.selectedSala));
        
        this.turmaAula.setMaterial(selectedMaterial);
        
        //Seta a data de alteração
        this.turmaAula.setDt_atualizacao(data);
        
        LoginController usuarioLogado = new LoginController();
        
        //Seta usuário que alterou a aula
        this.turmaAula.setUsuario_atualizacao(usuarioLogado.Usuario.getId());  
        
        tipoContrato = turmaService.buscaTipoContrato(professorDao.getById(selectedProfessor), diaSemanaDao.getById(this.selectedDiaSemana), calendar.getTime(), calendar2.getTime());        
        
        this.turmaAula.setTipoContrato(tipoContrato);        
        
        retorno = turmaDao.atualizar(this.turmaAula);
        
        resetTurmaAula();                
        
        listaAula = new ListDataModel(consulta.listaAula(TurmaAula.class, this.turma.getId()));
        
        if(retorno){           
           
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Aula Atualizada com sucesso!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            
        }         
        
    }
    
    /*
     * Bloco de deleção de um registro
     */
    
        public void deleteAula(){
            
            FacesMessage msg = null;  
            
            if(this.aulaSelecionada == null){
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selecione uma Aula para ser deletada!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                
            }else{
                turmaDao.excluir(this.aulaSelecionada);
                resetTurmaAula();
                listaAula = new ListDataModel(consulta.listaAula(TurmaAula.class, this.turma.getId()));
            }
            
        }
    
    /*
     * Fim do bloco de deleção de um registro
     */    
        
    public void exibeDisponibilidade(){
        
        if(selectedProfessor == 0){
            
          FacesMessage msg = null;  
          
          msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Selecione um professor!", "");
          FacesContext.getCurrentInstance().addMessage(null, msg);                          
            
        }else{
        
            org.primefaces.context.RequestContext.getCurrentInstance().execute("disponibilidade.show();");  

            listaDisponibilidade = new ListDataModel(disponibilidadeDao.listaDisponibilidade(disponibilidadeProfessor, selectedProfessor));
            
        }
        
    }
    
    public DataModel getListaDisponibilidade() {
        
            if(listaDisponibilidade == null || listaDisponibilidade.getRowCount() == 0){
                        
                    listaDisponibilidade = new ListDataModel(disponibilidadeDao.listaDisponibilidade(disponibilidadeProfessor, selectedProfessor));        
                    
            }
        
        return listaDisponibilidade;
    }    

    public void setListaAula(DataModel listaAula) {
        this.listaAula = listaAula;
    }

    public TurmaAula getAulaSelecionada() {
        return aulaSelecionada;
    }

    public void setAulaSelecionada(TurmaAula aulaSelecionada) {
        this.aulaSelecionada = aulaSelecionada;
    }

    public String getHoraIni() {
        return horaIni;
    }

    public void setHoraIni(String horaIni) {
        this.horaIni = horaIni;
    }

    public String getHoraFim() {
        return horaFim;
    }

    public void setHoraFim(String horaFim) {
        this.horaFim = horaFim;
    }        

    public Integer getSelectedDiaSemana() {
        return selectedDiaSemana;
    }

    public void setSelectedDiaSemana(Integer diaSemana) {
        this.selectedDiaSemana = diaSemana;
    }

    public DiaSemana getDiaSemana() {
        return diaSemana;
    }

    public void setDiaSemana(DiaSemana diaSemana) {
        this.diaSemana = diaSemana;
    }

    public Integer getSelectedSala() {
        return selectedSala;
    }

    public void setSelectedSala(Integer selectedSala) {
        this.selectedSala = selectedSala;
    }

    public Integer getSelectedFormaCalc() {
        return selectedFormaCalc;
    }

    public void setSelectedFormaCalc(Integer selectedFormaCalc) {
        this.selectedFormaCalc = selectedFormaCalc;
    }

    /**
     * @return the selectedMaterial
     */
    public String getSelectedMaterial() {
        return selectedMaterial;
    }

    /**
     * @param selectedMaterial the selectedMaterial to set
     */
    public void setSelectedMaterial(String selectedMaterial) {
        this.selectedMaterial = selectedMaterial;
    }
    
}